package com.lyx.rpc.common.utils;

import java.util.stream.IntStream;

/**
 * @Author by lyx
 * 序列化时针对消息头序列化类型的操作
 */
public class SerializationUtils {
    /**
     * 用于 去0 和 补0
     */
    private static final String PADDING_STRING = "0";

    /**
     * 约定序列化类型最大长度为16
     */
    public static final int MAX_SERIALIZATION_TYPE_COUNT = 16;

    /**
     * 为长度不足16的字符串后面补0
     *
     * @param str 原始字符串
     * @return 补0后的字符串
     */
    public static String paddingString(String str) {
        str = transNullToEmpty(str);
        if (str.length() >= MAX_SERIALIZATION_TYPE_COUNT) return str; // 检查输入字符串的长度是否大于或等于 16 如果是，则直接返回这个字符串，不进行任何补零操作。
        int paddingCount = MAX_SERIALIZATION_TYPE_COUNT - str.length();
        StringBuilder paddingString = new StringBuilder(str);
        IntStream.range(0, paddingCount).forEach((i) -> paddingString.append(PADDING_STRING));
        return paddingString.toString();
    }

    /**
     * 字符串去0 操作
     *
     * @param str 原始字符串
     * @return 去0后的字符串
     */
    public static String subString(String str) {
        str = transNullToEmpty(str);
        return str.replace(PADDING_STRING, "");
    }

    /**
     * 处理 null
     *
     * @param str
     * @return 不为 null
     */
    public static String transNullToEmpty(String str) {
        return str == null ? "" : str;
    }

    public static void main(String[] args) {
        String str1 = "abc";
        String paddedStr1 = paddingString(str1);
        System.out.println(paddedStr1); // 输出 "abc000000000000000"

        String str2 = "thisisalongstring";
        String paddedStr2 = paddingString(str2);
        System.out.println(paddedStr2); // 输出 "thisisalongstring"
    }
}
